package com.baichang.taoshunda.dao;

import com.baichang.framework.dao.BaseDao;
import com.baichang.framework.model.Page;
import com.baichang.taoshunda.entity.Order;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface OrderDao extends BaseDao<Order> {
    /**
     * 查询用户订单列表
     *
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page queryOrderList(Integer id, int nowPage, int pageSize);

    /**
     * 统计当前商家的当前月售
     *
     * @param bussId 商家编号
     * @return
     */
    int getCountByMouthAndBusssId(int bussId);

    /**
     * 根据订单状态获取订单列表
     *
     * @param bussId
     * @param orderState
     * @param date
     * @param endDate
     * @param nowPage
     * @param pageSize   @return
     */
    List<Map<String, Object>> findBusinessOrderByState(Integer bussId, Integer orderState, String date, String endDate, Integer nowPage, int pageSize);

    /**
     * 根据订单编号获取订单信息
     *
     * @param orderNumber 订单编号
     * @return
     */
    Order getOrderByOrderNumber(String orderNumber);

    /**
     * 修改订单状态
     *
     * @param orderNumber 订单编号
     * @param orderState  订单状态
     * @return
     */
    int updateOrderStateByOrderNumber(String orderNumber, Integer orderState);

    /**
     * 查询订单
     * 武圣路
     * 接口
     * 用户端
     *
     * @param orderState 订单状态
     * @param userId     用户编号
     * @param nowPage    当前页
     * @param pageSize   条数
     * @return
     */
    List<Map<String, Object>> getOrderList(Integer orderState, Integer userId, Integer nowPage, Integer pageSize);

    /**
     * 查询订单
     *
     * @param name
     * @param nameUser
     * @param orderNumber
     * @param orderState
     * @param nowPage
     * @param pageSize    @return
     */
    Page queryOrder(String name, String nameUser, String orderNumber, Integer orderState, int nowPage, int pageSize);


    /**
     * 获取商家今天收入
     *
     * @param bussId      商家编号
     * @param currentDate 当前日期
     * @return
     */
    Map<String, Object> getBussinessTodayMoney(Integer bussId, String currentDate);

    /**
     * 获取商家今天的订单数
     *
     * @param bussId      商家编号
     * @param currentDate 当前日期
     * @return
     */
    Map<String, Object> getBussinessTodayOrderNum(Integer bussId, String currentDate);

    /**
     * 查询订单详细
     *
     * @param orderNumber
     * @param nowPage
     * @param pageSize    @return
     */
    Page<Map<String, Object>> queryOrderDetail(String orderNumber, int nowPage, int pageSize);

    /**
     * 拒绝退款
     *
     * @param id
     * @param state
     * @param reason
     * @return
     */
    int updateState(Integer id, Integer state, String reason);

    /**
     * 获取订单信息
     *
     * @param id
     * @return
     */
    Order getOrderMoney(Integer id);

    /**
     * 同意退货
     *
     * @param id
     * @param state
     * @return
     */
    int updateOrderState(Integer id, Integer state);

    /**
     * 取消订单
     *
     * @param orderNumber 订单单号
     * @return
     */
    boolean cancelOrder(String orderNumber);

    /**
     * 修改备注
     *
     * @param remark
     * @param id
     */
    void updateOrderRemark(String remark, Integer id);

    /**
     * 修改订单的支付单号还有支付方式
     *
     * @param id             订单编号
     * @param newPayOrderKid 支付单号
     * @param payMethod      支付方式
     * @return
     */
    int updateOrderPayOrderKid(Integer id, String newPayOrderKid, int payMethod);

    /**
     * 修改订单是否支持无理由退货
     *
     * @param orderId
     */
    void updateOrderRefunds(int orderId);

    /**
     * 查询当前订单用户信息
     *
     * @param orderNumber
     * @return
     */
    Map<String, Object> getOrderBuyerIdInfo(String orderNumber);

    /**
     * 获取订单id
     *
     * @param orderNumber
     * @return
     */
    Order getOrderInfo(String orderNumber);

    /**
     * 配送员根据订单状态获取列表
     *
     * @param orderState 订单状态
     * @param maxlng     最大经度
     * @param minlng     最小经度
     * @param maxlat     最大纬度
     * @param minlat     最小纬度
     * @param disId
     * @param nowPage
     * @param pageSize   @return
     */
    List<Map<String, Object>> getOrderListByOrderState(int orderState, String maxlng, String minlng, String maxlat, String minlat, int disId, int nowPage, int pageSize);

    /**
     * 修改订单的配送员
     *
     * @param orderId 订单编号
     * @param disId   配送员编号
     * @return
     */
    boolean updateDeliveryIdByOrderId(int orderId, int disId);

    /**
     * @param orderNumber
     * @return
     */
    Order getOrderByPayOrderNumber(String orderNumber);

    /**
     * 查询用户的订单状态
     *
     * @param id
     * @return
     */
    List<Map<String, Object>> getOrderByUserInfo(Integer id);

    /**
     * 修改
     *
     * @param id
     * @param reason
     * @return
     */
    int updateOrderReason(Integer id, String reason);

    /***
     *
     * @param orderState
     * @param disId
     * @param nowPage
     * @param pageSize
     * @param starTime
     * @param endTime

     * @return
     */
    List<Map<String, Object>> getOrderByIdAndTime(int orderState, int disId, int nowPage, int pageSize, String starTime, String endTime);

    /**
     * 查询配送员订单
     *
     * @param deliveryId 配送员编号
     * @param state      订单状态
     *                   1：未完成
     * @return
     */
    List<Map<String, Object>> findDeliveryOrderByState(Integer deliveryId, int state);

    /**
     * @param id
     * @return
     */
    boolean updateOrderApplyTime(Integer id);

//    /**
//     * 配送员获取订单详情
//     *
//     * @param orderNumber 订单单号
//     * @return
//     */
//    Map<String, Object> getOrderByOrderInfoNumber(String orderNumber);

    /**
     * 修改订单状态
     *
     * @param orderId        订单编号
     * @param orderState     订单状态
     * @param backOrderState 订单退货/退款状态
     * @return
     */
    int updateOrderAllState(Integer orderId, Integer orderState, Integer backOrderState);

    /**
     * 修改订单退款状态
     *
     * @param orderId        订单编号
     * @param backOrderState 退款状态
     * @return
     */
    int updateOrderBackState(Integer orderId, Integer backOrderState);

    /**
     * @param orderState
     * @param userId
     * @return
     */
    int getTotal(Integer orderState, Integer userId);

    /**
     * 修改送达时间
     *
     * @param id
     */
    void updateEndtime(Integer id);

    Integer getIsReturnGoods(Integer orderId);

    /**
     * 查询有未完成的订单或者退款、退货的订单
     *
     * @param busId
     * @return
     */
    Map<String, Object> getOrderNum(Integer busId);

    /**
     * @param busId
     * @return
     */
    Map<String, Object> getOrderMaxCreated(Integer busId);

    /**
     * 查询全部完成的订单数量
     *
     * @param bussId
     * @return
     */
    Integer getAllOrderNumber(Integer bussId);

    /**
     * 用户端订单删除
     *
     * @param orderNumber
     * @return
     */
    boolean removeOrderUserStatus(String orderNumber);

    /**
     * 商家修改订单金额
     *
     * @param allMoney
     * @param money
     * @param platformGetMoney
     * @param bussinessGetMoney
     * @param orderNumber       @return
     * @param returnMoney
     */
    boolean updateOrderMoney(BigDecimal allMoney, Double money, BigDecimal platformGetMoney, BigDecimal bussinessGetMoney, String orderNumber, BigDecimal returnMoney);

    /**
     * @param orderState
     * @param userId
     * @param nowPage
     * @param pageSize
     * @return
     */
    List<Map<String, Object>> getReservationOrderList(Integer orderState, Integer userId, Integer nowPage, Integer pageSize);

    /**
     * @param bussId
     * @param orderState
     * @param date
     * @param endDate
     * @param nowPage
     * @param pageSize   @return
     */
    List<Map<String, Object>> findBusinessReservationOrderByState(Integer bussId, Integer orderState, String date, String endDate, Integer nowPage, Integer pageSize);

    /**
     * 退款原因
     *
     * @param reasonImg
     * @param reasonRefund
     * @param orderId
     */
    void updateReasonImgAndReasonRefund(String reasonImg, String reasonRefund, Integer orderId);

    /**
     * 修改是否上门安装
     *
     * @param orderId
     */
    void updateIsHomeInstallation(int orderId);

    /**
     * 预约订单
     *
     * @param userName
     * @param busName
     * @param nowPage
     * @param pageSize
     * @param orderNumber
     * @param orderState
     * @return
     */
    Page queryAppointmentOrder(String userName, String busName, int nowPage, int pageSize, String orderNumber, Integer orderState);

    /**
     * @param orderNumber
     * @return
     */
    boolean removeOrderCompanyStatus(String orderNumber);

    /**
     * @param orderId
     * @param singleReason
     */
    void updateSingleReason(Integer orderId, String singleReason);

    /**
     * @return
     */
    Map<String, Object> allOrder(int type);

    /**
     * @param orderNumber
     * @param add
     */
    void updateRedpacketMoney(String orderNumber, BigDecimal add);

    /**
     * @return
     */
    Map<String, Object> allDispatchingOrder();

    /**
     * @return
     */
    Map<String, Object> dayDispatchingOrder();

    /**
     * @return
     */
    Map<String, Object> monthDispatchingOrder();

    /**
     * @return
     */
    Map<String, Object> yearDispatchingOrder();

    /**
     * @param type
     * @return
     */
    Map<String, Object> allDealOrder(int type);

    /**
     * @param userId
     * @return
     */
    int getOrderCountBy(Integer userId);

    /**
     * 修改支付方式
     *
     * @param payMethod
     * @param id
     */
    void updatePayType(int payMethod, Integer id);

    /**
     * 查询配送员是否存在配送中的订单
     *
     * @param id
     * @return
     */
    int getOrderCountByDeliveryId(Integer id);

    /**
     * @param barterImg
     * @param barterRefund
     * @param id
     * @return
     */
    boolean updateBarter(String barterImg, String barterRefund, Integer id);

    /**
     * 功能描述:
     * 商家同意退款之后，确认归还货物
     *
     * @param orderId 订单编号
     * @param companyIsSure
     * @param:
     * @return:
     * @auther: wsl
     * @date: 2018/11/22 10:41
     */
    boolean updateCompanyIsSure(Integer orderId, int companyIsSure);
}